/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.model.mutables;

/**
 * 定义长整型可变对象，用于引用传递时直接修改值
 *
 * @version v1.0.0 @author zhichenggang 2017-3-25 新建与整理
 */
public final class MLong
{
    public volatile long value;
    
    /*******************************************************/
    //两个构造函数
    /*******************************************************/
    
    public MLong()
    {
    }
    
    public MLong(long value)
    {
        this.value = value;
    }
    
    /*******************************************************/
    //常用方法
    /*******************************************************/
    
    public long val()
    {
        return value;
    }
    
    public MLong val(long val)
    {
        this.value = val;
        return this;
    }
    
    public MLong val(MLong val)
    {
        this.value = val.value;
        return this;
    }
    
    public MLong skip(int skip)
    {
        this.value += skip;
        return this;
    }
    
    public MLong skip(long skip)
    {
        this.value += skip;
        return this;
    }
    
    /*******************************************************/
    //hashCode & equals & toString
    /*******************************************************/
    
    public int hashCode()
    {
        return (int)value;
    }

    public boolean equals(Object obj)
    {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        MLong other = (MLong) obj;
        if (value != other.value)
            return false;
        return true;
    }

    public String toString()
    {
        return String.valueOf(value);
    }
}
